Jenkins 配置iOS自动构建

通常我们的测试流程是这样:
1、开发人员1、开发人员2……提交代码,否则打包的开发人员拉取最新代码;
2、使用Xcode->Archive->Export->生成ipa包;
3、发给测试人员;

搭建Jenkins后,开发完成后,测试可以直接在Jenkins上构建ipa包测试,少了我们开发很多事情。

一、Jenkins初始配置

1、命令安装启动Jenkins

1
2
3
4
# 安装
brew install jenkins
# 启动
jenkins

2、在浏览器输入http://localhost:8080/,第一次启动要设置Jenkins管理员密码
3、选择安装推荐插件
4、创建管理账号密码
5、开始使用Jenkins

emmmm,有点干,初始化的时候忘记截图了

二、添加配置插件

搜索安装插件,安装插件后重启Jenkins生效

插件管理1.png

安装插件.png

三、创建配置项目

1、新建项目
Jenkins2.png

2、丢弃旧的构版本,我这里设置保留时间5日,保留最大构建数为20,可自行调整
通用配置.png

3、配置代码源,git地址、账号密码
源码管理.png

4、构建版本,Xcode 9使用插件构建超级麻烦,我们选择脚本构建
使用shell构建.png

1)将下面脚本修改后粘贴进去,需要修改的地方已经使用****标出来了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 获取项目名称
__PROJECT_NAME=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`
# 已经指定Target的Info.plist文件路径
__CURRENT_INFO_PLIST_NAME="Info.plist"
# 获取时间 如:如:2019-05-17_15_45_58
__CURRENT_DATE="$(date +%Y-%m-%d_%H_%M_%S)"
# ****************** ⬇️以下需要修改的参数 ********************
# 证书
__CODE_SIGN_DISTRIBUTION="iPhone Distribution: ***** Co., Ltd. (****)"
# 上传到蒲公英
__PGYER_U_KEY=""
__PGYER_API_KEY=""
# 指定Target名称
__SCHEME_NAME="SCHEME_NAME"
# ExportOptions.plist配置,根据打包导出方式不同plist文件配置也不同(Developmemt、AdHoc、App Store)
ExportOptionsPlistPath="文件路径/Plist/ExportOptionsAdHoc.plist"
# 指定打包编译的模式,如:Release, Debug...
__BUILD_CONFIGURATION="Release"
# 获取 Info.plist 路径
__CURRENT_INFO_PLIST_PATH="${__PROJECT_NAME}/Resouce/Plist/${__CURRENT_INFO_PLIST_NAME}"
# ****************** ⤴️以上需要修改的参数 ********************
# 分隔符
__LINE_BREAK_LEFT="\n*********"
__LINE_BREAK_RIGHT=*********\n"
# 获取版本号
__BUNDLE_VERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${__CURRENT_INFO_PLIST_PATH}`
# 获取编译版本号
__BUNDLE_BUILD_VERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" ${__CURRENT_INFO_PLIST_PATH}`
# 编译生成文件目录
__EXPORT_PATH="/Users/Wynter/Desktop/Archive/${__SCHEME_NAME}_${__CURRENT_DATE}"
echo "${__LINE_BREAK_LEFT} 编译生成文件目录 ${__EXPORT_PATH} ${__LINE_BREAK_RIGHT}"
# 归档文件路径
__EXPORT_ARCHIVE_PATH="${__EXPORT_PATH}/${__SCHEME_NAME}.xcarchive"
# ipa 导出路径
__EXPORT_IPA_PATH="${__EXPORT_PATH}"
# ipa 名字
__IPA_NAME="${__SCHEME_NAME}_V${__BUNDLE_BUILD_VERSION}_${__CURRENT_DATE}"
# clean
echo "================= Clean一下 ================="
xcodebuild clean -workspace ${__SCHEME_NAME}.xcworkspace \
-scheme ${__SCHEME_NAME} \
-configuration ${__BUILD_CONFIGURATION} \
#-alltargets
echo "================= Clean一下 Over ================="
# archive
echo "============== archive =================="
xcodebuild archive -workspace ${__SCHEME_NAME}.xcworkspace \
-scheme ${__SCHEME_NAME} \
-configuration ${__BUILD_CONFIGURATION} \
-archivePath ${__EXPORT_ARCHIVE_PATH} \
CFBundleVersion=${__BUNDLE_BUILD_VERSION} \
-destination generic/platform=ios \
CODE_SIGN_IDENTITY="${__CODE_SIGN_DISTRIBUTION}"
# export ipa
echo "+++++++++++++++++ exportArchive +++++++++++++++++"
xcodebuild -exportArchive -archivePath ${__EXPORT_ARCHIVE_PATH} \
-exportPath ${__EXPORT_IPA_PATH}\
-destination generic/platform=ios\
-exportOptionsPlist ${ExportOptionsPlistPath}\
-allowProvisioningUpdates
# 修改ipa文件名称
mv ${__EXPORT_IPA_PATH}/${__SCHEME_NAME}.ipa ${__EXPORT_IPA_PATH}/${__IPA_NAME}.ipa
# 上传到蒲公英
curl -F "file=@${__EXPORT_IPA_PATH}/${__IPA_NAME}.ipa" \
-F "uKey=${__PGYER_U_KEY}" \
-F "_api_key=${__PGYER_API_KEY}" \
"http://www.pgyer.com/apiv1/app/upload"
open ${__EXPORT_IPA_PATH}

2)修改plist文件配置后保存到本地,然后在ExportOptionsPlistPath变量后写明路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>method</key>
<!-- 打包模式 如:ad-hoc、app-store -->
<string>ad-hoc</string>
<key>provisioningProfiles</key>
<dict>
<!-- Bundle Identfier -->
<key>com.***</key>
<!-- 配置文件名称 -->
<string>projectName_adhoc</string>
</dict>
<key>signingCertificate</key>
<string>iPhone Distribution</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<!-- teamID -->
<string>***</string>
<key>thinning</key>
<string>&lt;none&gt;</string>
</dict>
</plist>
![创建项目.jpg](https://upload-images.jianshu.io/upload_images/937490-22d67ae7274efa1b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5、构建完成后发邮件通知

1)项目中添加邮件通知

添加邮件通知.png

2)配置收发件人信息,系统设置->邮件插件管理

系统设置邮件.png
邮件通知2.png

构建成功失败邮件通知.png

四、构建项目

1、点击立即构建,左下方会出现构建历史
红色表示失败,蓝色表示成功,灰色表示取消
构建历史.png
2、查看构建日志,如果构建失败我们可以通过日志分析
构建日志.png

五、总结

折腾完了发现还是挺简单的,麻烦的也就是脚本配置。